<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      /*
        promise 封装异步代码
        ① 将异步代码全部写到new Promise的回调函数（参数）中
        ② 异步代码中执行结果或者异常，都将使用 resolve 或 reject 传递到 then 或 catch 中处理

        抛出捕获异常
        ① catch 可以捕获异步抛出的异常
        ② catch 补货promise所有回调函数中的异常

        try...catch 和 promise.catch 的区别
        ① try...catch 只能使用 throw 抛出异常，try 的其他代码会被终端执行，promise 还可以使用 reject 抛出异常，不会中断当前作用域其他代码的执行
        ② throw 只能同步抛出异常，try...catch也只能捕获同步抛出的异常，reject 可以异步抛出异常，promise.catch 同步和异步的异常都可以捕获

      */

      // try {
      //   setTimeout(() => {
      //     console.log(username);
      //     throw ''
      //   }, 3000);
      // } catch (error) {
      //   console.log(error.message);
      // }
      new Promise((resolve, reject) => {
        setTimeout(() => {
          // throw new Error("....");
          reject(new Error("...."));
          console.log("hehehe");
        }, 3000);
      })
        .then(() => {
          console.log("then");
        })
        .catch((e) => {
          console.log(e.message);
        });
    </script>
  </body>
</html>
